#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
    int i = 0;
    int c = 0;
    int iflag = 0;
    int fflag = 0;
    int sflag = 0;
    char* fvalue = NULL;
    char* svalue = NULL;

    printf("Initial optind: %d\n", optind);
    while ((c = getopt(argc, argv, "f:is::")) != -1) {
        printf("optind = %d, option = %c\n", optind, c);
        switch(c) {
            case 'f':
                fflag = 1; fvalue = optarg; break;
            case 'i':
                iflag = 1; break;
            case 's':
                sflag = 1; svalue = optarg; break;
            case '?':
                // optopt是getopt使用过程中，遇到无效选项时设置的全局变量，表示当前选项字符
                printf("Unknown option: -%c\n", optopt);
                break;
            case ':':
                printf("-%c missing option argument\n", optopt);
                break;
            case 1:
                printf("inter: %s\n", optarg);
                break;
            default:
                printf("ret = %d\n", c);
        }
    }
    printf("fflag = %d, fvalue = %s, iflag = %d, sflag = %d, svalue = %s\n", fflag, fvalue, iflag, sflag, svalue);
    // 输出解析完选项后的参数（非选项参数）
    // optind由getopt管理，每次调用getopt时，它会递增，指向下一个未处理的参数
    printf("Non-option arguments start from index %d:\n", optind);
    for (i = optind; i < argc; i++) {
        printf("parameter: %s\n", argv[i]);
    }

    return 0;
}
